//题目描述
//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 
//每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢？ 
//注意：给定 n 是一个正整数。
//输入描述
//输入共一行，包含两个正整数，分别表示n, m
//输出描述
//输出一个整数，表示爬到楼顶的方法数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int n,m;
	cin >> n >> m;
	vector<int> nums(m);
	for(int i = 0; i < m; i++)
		nums[i] = i+1;
	
	vector<uint64_t> dp(n+1);
	//初始化
	dp[0] = 1;
	//递推
	for(int i = 0; i <= n; i++)
	{
		for(int j = 0; j < m; j++)
		{
			if(i < nums[j]) continue;
			else dp[i] = dp[i] + dp[i-nums[j]];
		}
	}
	cout << dp[n];
	return 0;
}
